iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Web 3

以 Python 進入以太坊虛擬機 (EVM) 的幻想境界系列 第 6

虛擬境界 6:停止和算術指令

  • 分享至 

  • xImage
  •  

第六章:介紹 EVM 停止和算術指令

在這一章中,我們將介紹 EVM 中的停止和算術指令,包括 STOP、ADD、MUL、SUB、DIV、SDIV、MOD、SMOD、ADDMOD、MULMOD、EXP 和 SIGNEXTEND。

#
# Stop and Arithmetic
#
STOP = 0x00
ADD = 0x01
MUL = 0x02
SUB = 0x03
DIV = 0x04
SDIV = 0x05
MOD = 0x06
SMOD = 0x07
ADDMOD = 0x08
MULMOD = 0x09
EXP = 0x0A
SIGNEXTEND = 0x0B

STOP 指令概述

STOP 指令用於停止程式的執行,這會使得 EVM 停止執行並返回。

def stop(self):
    # 停止程式的執行
    return

算術指令概述

算術指令包括 ADD、MUL、SUB、DIV、SDIV、MOD、SMOD、ADDMOD、MULMOD、EXP 和 SIGNEXTEND。這些指令用於執行不同的算術運算。

  • ADD 指令:將兩個數相加。
def add(self):
    value1 = self.evm.stack.pop()
    value2 = self.evm.stack.pop()
    result = value1 + value2 
    self.evm.stack.append(result)
  • MUL 指令:將兩個數相乘。
def mul(self):
    value1 = self.evm.stack.pop()
    value2 = self.evm.stack.pop()
    result = value1 * value2
    self.evm.stack.append(result)

  • SUB 指令:將兩個數相減。
def sub(self):
    value1 = self.evm.stack.pop()
    value2 = self.evm.stack.pop()
    result = value2 - value1
    self.evm.stack.append(result)

  • DIV 指令和 SDIV指令:將兩個數相除。
def div(self):
    value1 = self.evm.stack.pop()
    value2 = self.evm.stack.pop()
    if value1 == 0:
        result = 0
    else:
        result = value2 // value1
    self.evm.stack.append(result)
  • mod 和 smod 指令:將兩個數相除。
  def mod(self):
    value1 = self.evm.stack.pop()
    value2 = self.evm.stack.pop()
    result = value1 % value2 if value1 != 0 else 0
		self.evm.stack.append(result)

addmod 指令:mod 加法

def addmod(self):
	value1 = self.evm.stack.pop()
  value2 = self.evm.stack.pop()
	value3 = self.evm.stack.pop()
	result = (value1 + value2) % value3 if value3 != 0 else 0
	self.evm.stack.append(result)

mulmod 指令:mod 乘法

def addmod(self):
	value1 = self.evm.stack.pop()
  value2 = self.evm.stack.pop()
	value3 = self.evm.stack.pop()
	result = (value1 + value2) % value3 if value3 != 0 else 0
	self.evm.stack.append(result)

exp 指令:乘冪數

def exp(self):
	value1 = self.evm.stack.pop()
  value2 = self.evm.stack.pop()
	result = pow(value1, value2) 
	self.evm.stack.append(result)

SIGNEXTEND 指令概述

SIGNEXTEND 指令用於擴展數據的符號位。

def signextend(self):
    value1 = self.evm.stack.pop()
    value2 = self.evm.stack.pop()
    sign_bit = 255 if value1 & 128 else 0
    result = (value2 & ((1 << (8 * value1)) - 1)) | (sign_bit << (8 * value1))
    self.evm.stack.append(result)

在這一章中,我們介紹了 EVM 停止和算術指令,包括 STOP、ADD、MUL、SUB、DIV、SDIV、MOD、SMOD、ADDMOD、MULMOD、EXP 和 SIGNEXTEND。這些指令執行算術運算並可以擴展數據的符號位。接下來,我們將繼續擴充你的 EVM 功能,如果有任何疑問,請隨時提問!


上一篇
虛擬境界 5:控制流 Flow
下一篇
虛擬境界 7:比較和位元 (Comparison) 指令
系列文
以 Python 進入以太坊虛擬機 (EVM) 的幻想境界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言